﻿// 4287. 导航噩梦.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>

/*
https://www.acwing.com/problem/content/4290/

农夫约翰有 N
 个农场，编号 1∼N
。

M
 条双向道路连接着这些农场，每条道路都是水平或者垂直的，道路的长度可能不尽相同。

农场地图类似于下图，农场已用 F1∼F7
 标出，连接农场的道路的长度在 () 内给出。

           F1 --- (13) ---- F6 --- (9) ----- F3

            |                                 |

           (3)                                |

            |                                (7)

           F4 --- (20) -------- F2            |

            |                                 |

           (2)                               F5

            |

           F7

每个农场最多可以在东南西北四个方向通过道路直接连接最多四个其他农场。

农场只会位于道路的端点处，每条道路的每个端点处都存在农场。

道路之间不会交叉，每对农场之间有且仅有一条连通路径。

有一天，农夫约翰发现他的纸质版农场地图不见了。

幸运的是，他在电脑中保存了每条道路的相关信息。

他打算逐条读取这些信息，并利用这些信息对地图进行重新绘制。

每条信息的记录格式为 A B L D，表示存在一条双向道路从农场 A
 沿 D
 方向延伸至农场 B
，长度为 L
。

在他整理这些信息的过程中，他的邻居鲍勃对他进行了共计 K
 次询问。

每次询问的记录格式为 A B I，表示在刚刚整理完前 I
 条信息时，鲍勃向约翰提问：“农场 A
 到农场 B
 的曼哈顿距离是多少？”

两点 (x1,y1)
 和 (x2,y2)
 之间的曼哈顿距离即为 |x1−x2|+|y1−y2|
。

如果约翰能够凭借已整理出的信息回答鲍勃的问题，他就会老实回答问题。

如果约翰无法凭借已整理出的信息回答鲍勃的问题，他就会诚恳抱歉，并以 −1
 回复。

输入格式
第一行包含两个整数 N,M
。

接下来 M
 行，每行描述一条道路信息，格式为 A B L D，其中 A,B,L
 为整数，D
 为 E（东）、S（南）、W（西）、N（北）之一，具体含义见题面描述。

再一行包含整数 K
。

接下来 K
 行，每行描述一次询问，格式为 A B I，A,B,I
 均为整数，具体含义见题面描述。

输出格式
每次询问输出一行答案，如果能够凭借询问时已整理出的信息回答问题，则输出问题答案，如果无法回答问题，则输出 −1
。

数据范围
2≤N≤40000
,
1≤M<40000
,
1≤K≤10000
,
1≤A,B≤N
,
1≤L≤1000
,
1≤I≤M
。

输入样例：
7 6
1 6 13 E
6 3 9 E
3 5 7 S
4 1 3 N
2 4 20 W
4 7 2 S
3
1 6 1
1 4 3
2 6 6
输出样例：
13
-1
10
样例解释
样例对应的农场地图已在题面中给出。

对于第 1
 个询问，凭借第 1
 条信息，可直接得出 1
 和 6
 的曼哈顿距离为 13
。

对于第 2
 个询问，凭借前 3
 条信息，我们仍未知道 1
 和 4
 之间的距离。

对于第 3
 个询问，掌握全部信息，当然可以得出 2
 和 6
 的曼哈顿距离为 10
。
*/
int main()
{
    std::cout << "Hello World!\n";
}

 